In [20]:
text = (
    "HeL, lo Mom, "
    "Im, sO, rRYi, dIDn, t, Wri, Teto, YoUS, O, oN, eRif, ee, "
    "Lter, rI, Bl, E, ABO, uTr, U, nnI, nGa, w, Ay, BUT, iwAn, "
    "TYO, UTO, Kno, W, that, i MfIN, eIM, co, mIng, hOme, SoO, "
    "ni, lOve, yOus, OM, u, chic, a, nTwa, iTTo, seey, o, uImo, "
    "kLOv, eyou, m, oMby, eBYe"
)

Define the morse code


In [12]:
ALPHA_MORSE = {
    'A': '.-',     'B': '-...',   'C': '-.-.', 
    'D': '-..',    'E': '.',      'F': '..-.',
    'G': '--.',    'H': '....',   'I': '..',
    'J': '.---',   'K': '-.-',    'L': '.-..',
    'M': '--',     'N': '-.',     'O': '---',
    'P': '.--.',   'Q': '--.-',   'R': '.-.',
    'S': '...',    'T': '-',      'U': '..-',
    'V': '...-',   'W': '.--',    'X': '-..-',
    'Y': '-.--',   'Z': '--..',
    
    '0': '-----',  '1': '.----',  '2': '..---',
    '3': '...--',  '4': '....-',  '5': '.....',
    '6': '-....',  '7': '--...',  '8': '---..',
    '9': '----.' 
}

In [13]:
MORSE_ALPHA = {v:k for k,v in ALPHA_MORSE.iteritems()}; MORSE_ALPHA


Out[13]:
{'-': 'T',
 '--': 'M',
 '---': 'O',
 '-----': '0',
 '----.': '9',
 '---..': '8',
 '--.': 'G',
 '--.-': 'Q',
 '--..': 'Z',
 '--...': '7',
 '-.': 'N',
 '-.-': 'K',
 '-.--': 'Y',
 '-.-.': 'C',
 '-..': 'D',
 '-..-': 'X',
 '-...': 'B',
 '-....': '6',
 '.': 'E',
 '.-': 'A',
 '.--': 'W',
 '.---': 'J',
 '.----': '1',
 '.--.': 'P',
 '.-.': 'R',
 '.-..': 'L',
 '..': 'I',
 '..-': 'U',
 '..---': '2',
 '..-.': 'F',
 '...': 'S',
 '...-': 'V',
 '...--': '3',
 '....': 'H',
 '....-': '4',
 '.....': '5'}

Create a function to easily modify our "guesses" of what the translation scheme is


In [46]:
def trans(c):
    if c.isupper():
        return '-'
    elif c.islower():
        return '.'
    else:
        return ' '

In [47]:
translated_text = ''.join(map(trans, text)); translated_text


Out[47]:
'-.-  .. -..  -.  .-  .--.  .--.  .  -..  -...  -.--  -  .-  .-..  ..  -...  .-  -.  -  ---  .-.  -  ..-  .-.  .  -.  ---  ..-.  ---  ---  -..  -  ....  . -.--  .--  ..  .-..  .-..  -.-  ..  .-..  .-..  --  .  ....  .  .-..  .--.  ....  .  .-..  .--.  ....  .  .-..  .--.'

Now we translate from morse


In [48]:
''.join(map(lambda c: MORSE_ALPHA.get(c, '?'), translated_text.split()))


Out[48]:
'KIDNAPPEDBYTALIBANTORTURENOFOODTHEYWILLKILLMEHELPHELPHELP'

Shit got real, yo